package com.eureka.eurekaserviceinvoker.client;

import com.eureka.eurekaserviceinvoker.contract.MyUrl;
import com.eureka.eurekaserviceinvoker.entity.Person;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.*;

/**
 * 具备负载均衡能力
 * 通过服务提供者的应用名称(eureka-service-provider项目的yml设置spring.application.name)调用接口
 * FeignClient注解底层是 Client被封装到LoadBalanceClient类，这个类结合类Ribbon做到了负载均衡
 * Created by earl on 2018/4/28.
 */
@FeignClient("eureka-service-provider")
public interface PersonClient {


    //SpringCloud提供了内置的翻译器，会将Spirng MVC相关的映射注解含义告诉Feign
    //使用SpirngCloud提供的注解，就不能使用Feigin的默认注解
    @GetMapping("/provider/hello")
    String hello();


    //这里PathVariable注解必须指定名称，会报错
    @PutMapping(value = "/provider/person/{id}",
            produces = MediaType.APPLICATION_JSON_VALUE,
            consumes =  MediaType.APPLICATION_JSON_VALUE)
    Person person(@PathVariable("id") Long id, Person p);



}
